#include <iostream>
#include <set>
using namespace std;
/**
 * @brief 产生冠军
 * 有一群人打乒乓球比赛,两两捉对厮杀,每两个人之间最多打一场比赛。
 * 球赛的规则如下：
 * 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定A一定能打败C。
 * 如果A打败了B,B又打败了C,而且C又打败了A,那么A、B、C三者都不可能成为冠军。
 * 根据这个规则,无须循环较量,或许就能确定冠军。本题的任务就是对于一群比赛选手,
 * 在经过了若干场厮杀之后,确定是否已经产生了冠军。
 * @return int 
 */
int main(){
    set<string> A, B;
    string s1, s2;
    int n;
    while(cin>>n && n){ //若干个用例
        //每个n场比赛 s1 打败了 s2
        for(int i = 0; i < n; i++){ 
            cin>>s1>>s2;
            //把所有人放入A集合
            A.insert(s1);
            A.insert(s2);
            //失败者放入B集合
            B.insert(s2);
        }
        
        if(A.size() - B.size() == 1){//可以确定冠军
            cout<<"Yes"<<endl;
        }else{
            cout<<"No"<<endl;
        }
        A.clear();
        B.clear();
    }
    return 0;
}